Trend Micro Deep SecurityのREST APIを試してみた
はじめに
こんにちは、藤本です。
先日、Trend Micro Deep SecurityのAPIを試してみたでSOAP API、SOAP APIを利用したSDKをご紹介しました。その中でREST APIも実装中と記載しましたが、同僚よりREST APIのドキュメントのパスを教えていただいたので早速試してみました。
概要
Deep SecurityはAPIの方式として、SOAP / REST両方のAPIを提供しています。SOAP APIは規約を理解していないと使いづらいし、学習コストも高いので、直感で扱いやすい(人が理解しやすい)REST APIが利用できるのであれば、REST APIを使いたいです。ただ現在はSOAP APIの方が操作可能な機能が充実しているため、利用されている方はSOAP APIが多いでしょうか。REST APIは今後のAPI拡充に期待します!
REST APIが対応している機能は以下となります。
- ログイン/ログアウト
- Cloud Account管理
- イベント取得
- ステータスモニタリング
- テナント管理
- 使用状況モニタリング
ドキュメントはこちらのページの対象バージョンのWebService APIのzipからダウンロードできます。
zipを展開すると以下のようなコンテンツが含まれています。
- SOAP API
- PDFドキュメント
- サンプルコード(Java)
- ライブラリ
- REST API
- HTMLドキュメント一式
- サンプルコード(Java)
- ライブラリ
やってみた
今回はREST APIのHTMLドキュメントを参考にcurl
コマンドを利用して、REST APIをコールします。
環境
今回はDSaaSを利用して検証しています。
- Deep Seecurity Manager : 10.0.2192
APIの有効化
SOAP API同様、REST APIを利用する場合もAPIを有効化したRoleを持つユーザーを用意する必要があります。
手順はTrend Micro Deep SecurityのAPIを試してみたのAPIの有効化をご参照ください。
REST APIによるログイン/ログアウト
curl
コマンドを利用して、REST APIのログインAPIをコールします。
ドキュメントページからHTTPメソッド、URL、パラメータを確認します。
HTTPメソッドはPOST
、URLはDeep Security ManagerのエンドポイントにAPIのパスを加えたhttps://app.deepsecurity.trendmicro.com/rest/authentication/login
、パラメータはテナント名(DSaaSの場合)、ユーザー名、パスワードをXML形式、もしくはJSON形式で指定します。パラメータの形式はContent-Type
ヘッダーにより切り替えることが可能です。
XML形式の場合
# curl -XPOST -H "Content-Type: application/xml" https://app.deepsecurity.trendmicro.com/rest/authentication/login -d '<dsCredentials> <password>XXXXXXXXXXXXXXXXXX</password> <tenantName>XXXXXXXXXXXXXXXXXX</tenantName> <userName>apiuser</userName> </dsCredentials>' XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:9E388065885079EA71E9EB806FC78AFF
JSON形式の場合
# curl -XPOST -H "Content-Type: application/json" https://app.deepsecurity.trendmicro.com/rest/authentication/login -d '{ "dsCredentials": { "password": "XXXXXXXXXXXXXXXXXX", "tenantName": "XXXXXXXXXXXXXXXXXX", "userName": "apiuser" } }' XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:CBD25E948044E0D63684254267742435
レスポンスはセッションIDが返ってきます。
以降の操作はセッションIDを利用します。
ログアウトはHTTPメソッドにDELETE
、パスは/authentication/logout
、パラメータはクエリストリングでsID
にセッションIDを指定します。
# curl -XDELETE "https://app.deepsecurity.trendmicro.com/rest/authentication/logout?sID=XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:9E388065885079EA71E9EB806FC78AFF" OK
レスポンスはOK
のメッセージが返ってきます。
Cloudアカウント情報取得
Deep Security Managerと連携しているCloudアカウント情報を取得します。今回はAWSアカウントと連携している情報を例に取得します。レスポンスはXML形式、もしくはJSON形式で取得します。形式はAccept
ヘッダにより切り替えます。指定しない場合、APIによって挙動が異なるのでご注意ください。
XML形式の場合
curl -H "Content-Type: application/xml" "https://app.deepsecurity.trendmicro.com/rest/cloudaccounts/26?sID=XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:CBD25E948044E0D63684254267742435" <?xml version="1.0" encoding="UTF-8" standalone="yes"?><cloudAccount><cloudAccountId>26</cloudAccountId><cloudRegion>amazon.cloud.region.key.6</cloudRegion><cloudType>AMAZON</cloudType><description>ap-northeast-1</description><name>アジアパシフィック (東京)</name><realTimeSynchronization>true</realTimeSynchronization></cloudAccount>
JSON形式の場合
# curl -H "Accept: application/json" "https://app.deepsecurity.trendmicro.com/rest/cloudaccounts/26?sID= XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:CBD25E948044E0D63684254267742435" {"cloudAccount":{"cloudAccountId":26,"cloudRegion":"amazon.cloud.region.key.6","cloudType":"AMAZON","description":"ap-northeast-1","name":"アジアパシフィック (東京)","realTimeSynchronization":true}}
このようにアカウントのプロバイダ情報やアカウントのリージョン情報をXML形式、もしくはJSON形式で取得します。
まとめ
いかがでしたでしょうか?
SOAP APIと違って、URLのパスやパラメータが明確で直感的にAPIをコールできました。またJSONでやり取りできるのでプログラムに組み込みやすいのも嬉しいです。